home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1996 / MacHack 1996.toast / Hacks / Hacks ’89 / gadlife / source (ugly) / cursors.c next >
Encoding:
C/C++ Source or Header  |  1989-05-08  |  2.6 KB  |  90 lines  |  [TEXT/KAHL]

  1. #include "main.h"
  2. #include "cursors.h"
  3.  
  4. static int            toolCurs = pencilCurs;
  5.  
  6. /*******************************************************
  7. *                                                                *
  8. *    This updates the cursor, and sets up the mouseGood region for use with Wait-    *
  9. *    NextEvent.  The cursor is only actually set if it needs to be.                *
  10. *                                                                *
  11. *******************************************************/
  12.  
  13. updateMouse( mouseGood )
  14.     RgnHandle            mouseGood;
  15. {
  16.      Point                where;
  17.      RgnHandle            tempRgn;
  18.      dataHandle        theDataHand;
  19.       WindowPtr        theWindow;
  20.       dataPtr            theData;
  21.      int                cursor, cmdMod;
  22.  
  23.     cursor = arrowCurs;
  24.      theWindow = FrontWindow();
  25.     if( theWindow && (((WindowPeek)theWindow)->windowKind >= userKind )) {
  26.         theDataHand = ( dataHandle )GetWRefCon( theWindow );
  27.         HLock( theDataHand );
  28.         theData = *theDataHand;
  29.         RectRgn( mouseGood, &(( **theDataHand ).dataRect ));
  30.         cmdMod = getModifiers() & cmdKey;
  31.         if( theData->isSelect && !cmdMod )
  32.             DiffRgn( mouseGood, theData->selRgn, mouseGood );
  33.         GetMouse( &where );
  34.         if( PtInRgn( where,  mouseGood )) {
  35.             cursor = cmdMod ? marqeeCurs : toolCurs;
  36.             OffsetRgn( mouseGood, -theWindow->portBits.bounds.left, -theWindow->portBits.bounds.top );
  37.         } else {
  38.             OffsetRgn( mouseGood, -theWindow->portBits.bounds.left, -theWindow->portBits.bounds.top );
  39.             tempRgn = NewRgn();
  40.             RectRgn( tempRgn, &( screenBits.bounds ));
  41.             DiffRgn( tempRgn, mouseGood, mouseGood );
  42.             DisposeRgn( tempRgn );
  43.         }
  44.         HUnlock( theDataHand );
  45.     } else setBigRgn( mouseGood );
  46.     forceCurs( cursor );
  47. }
  48.  
  49. /*******************************************************
  50. *                                                                *
  51. *    Used to control access to the current value of toolCurs.  This merely reduces    *
  52. *    the number of global variables hanging about.                            *
  53. *                                                                *
  54. *******************************************************/
  55.  
  56. setToolCurs( newTool )
  57. int        newTool;
  58. {
  59.     toolCurs = newTool;
  60. }
  61.  
  62. getToolCurs() {
  63.     return( toolCurs );
  64. }
  65.  
  66. /*******************************************************
  67. *                                                                *
  68. *    ForceCurs sets the current cursor.  If the badCursFlag is passed, it knows        *
  69. *    that what it thinks is the current cursor may be wrong, and it corrects this.    *
  70. *    At cursor update time, this is called to make the cursor correct, if it is not.    *
  71. *                                                                *
  72. *******************************************************/
  73.  
  74. forceCurs( newCurs )
  75.     int        newCurs;
  76. {
  77.     CursHandle    theCursor;
  78.     static int        oldCurs = arrowCurs;
  79.     
  80.     if( newCurs != oldCurs ) {
  81.         if( newCurs == badCursFlag )
  82.             newCurs = oldCurs;
  83.         if( newCurs != arrowCurs ) {
  84.             theCursor = GetCursor( baseCursID + newCurs );
  85.             if( theCursor ) SetCursor( *theCursor );
  86.             else SetCursor( &arrow );
  87.         } else SetCursor( &arrow );
  88.         oldCurs = newCurs;
  89.     }
  90. }